import http.cookiejar, urllib.request

"""

Cookie 的处理就需要相关的 Handler 了。
"""

# 示例1 cookie的获取
"""
首先，我们必须声明一个 CookieJar 对象。接下来，就需要利用 HTTPCookieProcessor 来构建一个 Handler，最后利用 build_opener 方法构建出 Opener，执行 open 函数即可。
"""
# cookie = http.cookiejar.CookieJar()
# handler = urllib.request.HTTPCookieProcessor(cookie)
# opener = urllib.request.build_opener(handler)
# response = opener.open('https://www.baidu.com')
# for item in cookie:
#     print(item.name + "=" + item.value)


# 示例2 cookie数据存储到文件中01
"""
    这时 CookieJar 就需要换成 MozillaCookieJar，它在生成文件时会用到，是 CookieJar 的子类，可以用来处理 Cookie 和文件相关的事件，比如读取和保存 Cookie，可以将 Cookie 保存成 Mozilla 型浏览器的 Cookie 格式。
"""
# filename = 'cookie.txt'
# cookie = http.cookiejar.MozillaCookieJar(filename)
# handler = urllib.request.HTTPCookieProcessor(cookie)
# opener = urllib.request.build_opener(handler)
# response = opener.open('https://www.baidu.com')
# cookie.save('../files/'+filename, ignore_discard=True, ignore_expires=True)


# 示例3 cookie数据存储到文件中02
"""
 LWPCookieJar 同样可以读取和保存 Cookie，但是保存的格式和 MozillaCookieJar 不一样，它会保存成 libwww-perl（LWP）格式的 Cookie 文件。
 要保存成 LWP 格式的 Cookie 文件，可以在声明时就改为： cookie = http.cookiejar.LWPCookieJar(filename)
"""
# filename = 'cookie.txt'
# cookie = http.cookiejar.LWPCookieJar(filename)
# handler = urllib.request.HTTPCookieProcessor(cookie)
# opener = urllib.request.build_opener(handler)
# response = opener.open('https://www.baidu.com')
# cookie.save('../files/'+filename, ignore_discard=True, ignore_expires=True)


# 示例4 读取示例3 LWPCookieJar 格式存储的cookie，并且在请求中使用cookie
"""
这里调用 load 方法来读取本地的 Cookie 文件，获取到了 Cookie 的内容。不过前提是我们首先生成了 LWPCookieJar 格式的 Cookie，并保存成文件，然后读取 Cookie 之后使用同样的方法构建 Handler 和 Opener 即可完成操作。

运行结果正常的话，会输出百度网页的源代码。

通过上面的方法，我们可以实现绝大多数请求功能的设置了。
结合 处理登录+cookie存储+cookie读取和使用，可以请求绝大多数的站点了

如果想实现更多的功能，可以参考官方文档的说明：https://docs.python.org/3/library/urllib.request.html#basehandler-objects。
"""
cookie = http.cookiejar.LWPCookieJar()
cookie.load('../files/cookie.txt', ignore_discard=True, ignore_expires=True)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('https://www.baidu.com')
print(response.read().decode('utf-8'))





